package com.gxc.array;

import java.util.Scanner;

/**
 * 部门准备举办一场王者荣耀表演赛，有10名游戏爱好者参与，分5为两队，每队5人。每位参与者都有一个评分，代表着他的游戏水平。为了表演赛尽可能精彩，我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总和。
 * 现在给你10名参与者的游戏水平评分，请你根据上述要求分队最后输出这两组的实力差绝对值。
 * 例: 10名参赛者的评分分别为5 1 8 3 4 6 710 9 2，分组为 (135 8 10) (24 679)，两组实力差最小，差值为1。有多种分法，但实力差的绝对值最小为1。
 *
 * 输入描述
 * 10个整数，表示10名参与者的游戏水平评分。范围在[1,10000]之间
 *
 * 输出描述
 * 1个整数，表示分组后两组实力差绝对值的最小值.
 */
public class MinScore {

    static int res = Integer.MAX_VALUE;
    static int totalSum = 0;
    static int targetSum = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] array = new int[10];

        for (int i = 0; i < array.length; i++) {
            array[i] = scanner.nextInt();
            totalSum += array[i];
        }
        scanner.close();

        dfs(array, 0, 0, 0);
        System.out.println(res);
    }

    public static void dfs(int[] array, int index, int count, int currentSum) {
        if (count == 5) {
            int otherSum = totalSum - currentSum;
            res = Math.min(res, Math.abs(otherSum - currentSum));
            return;
        }

        if (index == 10) {
            return;
        }

        //选择当前index
        dfs(array, index+1, count+1, currentSum + array[index]);
        //不选择当前index
        dfs(array, index+1, count, currentSum);
    }

}
